package dominio;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.ItemPedidoTO;
import dto.PedidoTO;

@Entity
@Table(name = "Pedido")
public class Pedido extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@OneToOne
	@JoinColumn(name = "idCotizacion")
	private Cotizacion cotizacion;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idPedido")
	private List<ItemPedido> items;

	public Pedido() {
		items = new ArrayList<ItemPedido>();
	}

	public Cotizacion getCotizacion() {
		return cotizacion;
	}

	public void setCotizacion(Cotizacion cotizacion) {
		this.cotizacion = cotizacion;
	}

	public List<ItemPedido> getItems() {
		return items;
	}

	public void agregarItem(ItemPedido item) {
		items.add(item);
	}

	public PedidoTO getDTO() {
		PedidoTO dto = new PedidoTO();
		dto.setId(id);
		if (cotizacion != null)
			dto.setCotizacion(cotizacion.getDTO());
		for (ItemPedido i : items)
			dto.agregarItem(i.getDTO());
		return dto;
	}

	public static Pedido fromDTO(PedidoTO dto) {
		if (dto == null)
			return null;
		Pedido p = new Pedido();
		p.setId(dto.getId());
		p.setCotizacion(Cotizacion.fromDTO(dto.getCotizacion()));
		for (ItemPedidoTO i : dto.getItems())
			p.agregarItem(ItemPedido.fromDTO(i));
		return p;
	}
}